package com.c2b.algorithm.leetcode.base;

import java.util.ArrayList;
import java.util.List;

/**
 * <a href='https://leetcode.cn/problems/intersection-of-multiple-arrays/'>多个数组求交集(Intersection of Multiple)</a>
 * <p>给你一个二维整数数组 nums ，其中 nums[i] 是由 不同 正整数组成的一个非空数组，按 升序排列 返回一个数组，数组中的每个元素在 nums 所有数组 中都出现过。</p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：nums = [[3,1,2,4,5],[1,2,3,4],[3,4,5,6]]
 *      输出：[3,4]
 *      解释：
 *          nums[0] = [3,1,2,4,5]，nums[1] = [1,2,3,4]，nums[2] = [3,4,5,6]，在 nums 中每个数组中都出现的数字是 3 和 4 ，所以返回 [3,4] 。
 *
 * 示例 2：
 *      输入：nums = [[1,2,3],[4,5,6]]
 *      输出：[]
 *      解释：
 *          不存在同时出现在 nums[0] 和 nums[1] 的整数，所以返回一个空列表 [] 。
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 *  <ul>
 *      <li>1 <= nums.length <= 1000</li>
 *      <li>1 <= sum(nums[i].length) <= 1000</li>
 *      <li>1 <= nums[i][j] <= 1000</li>
 *      <li>nums[i] 中的所有值 互不相同</li>
 *  </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/1/19 16:16
 */
public class LC2248IntersectionOfMultipleArrays_S {

    static class Solution {
        public List<Integer> intersection(int[][] nums) {
            int[] cnt = new int[1001];
            for (int[] ints : nums) {
                for (int anInt : ints) {
                    ++cnt[anInt];
                }
            }
            int length = nums.length;
            List<Integer> resList = new ArrayList<>();
            for (int i = 1; i < cnt.length; i++) {
                if (cnt[i] >= length) {
                    resList.add(i);
                }
            }
            return resList;
        }
    }
}
